Bevezets a Visual Basic-be (VB 3.0-ra alapozva)
================================================
Nulladik rsz


Bevezets
-=-=-=-=-

Ez a rsz ltalnosan fog szlnia Visual Basic-rl. ltalnosan vltozkrl, a VB alapvet szintaktikjrl, stb. Ha mr folglalkoztl programozssal, akkor nem lesznek benne nagy jdonsgok, ha mr Basic-kel is foglalkoztl, akkor csak fuss t rajta. Ha mg abszolt semmit nem foglalkoztl programozssal, akkor szerintem nem ezzel kne kezdened, mert itt elg tmnyen adom le majd az anyagot...
 
Szintaktika
-=-=-=-=-=-

Kvetvn a Basic-es hagyomnyokat, az utastsokat vagy gy vlasztjuk el, hogy kln sorba rjuk ket, vagy gy, hogy kettspontot tesznk kzjk. Teht a

Print "Szia!": Print "Hogy vagy?"

sor ugyanazt eredmnyezi, mint a

Print "Szia!"
Print "Hogy vagy?"

sorok. Ez eddigi elgg egyszer, nem kell se pontosvesszt, se semmit rakni a parancsok vgre.
A sorokat nem muszj szmozni. A szmozs a Goto vagy a Gosub utastsok hasznlatakor jn jl; ezekkel ugrlhatunk a program sorai kztt, hasznlata ltszlag egyszerbb, mgsem ajnlott, mivel tlthatatlann teszi programunkat. A Goto elugrik egy sorra, a Gosub szintn elugrik, de egy Return utastsra visszaugrik oda, ahonnan hvtk. Plda:

Print "Szia!"
Gosub 10
Print "Vge!"
Exit Sub
10
Print "Hogy vagy?"
Return

Ezt ha lefuttatjuk, a kvetkezt kapjuk:

Szia!
Hogy vagy?
Vge!

A sorszmok helyett hasznlhatunk cimkket is, ezek arra jk, hogy jobban meg lehessen jegyezni az ugrsok cljait. Ez most szerintem nem rthet, de mindjrt rok egy pldt:

Print "Szia!"
Gosub MasodikSor:
Print "Vge!"
Exit Sub
MasodikSor:
Print "Hogy vagy?"
Return

Megfigyelhetted, hogy a cimke utn egy kettspontot kell tenni, mind magban a cimkben, mind az ugrs utastsnl.

Akkor most egy kicsit a felttelekrl: mint a tbbi programozsi nyelvben is, itt is az if szolgl elgazsok kialaktsra. Az if utn rjuk a felttelt, utna egy then utn azt, hogy mi trtnjen ha igaznak bizonyul a felttel. Pldul:

If A > 5 Then Print "Az A nagyobb mint 5."

Termszetesen Basic-ben is hasznlhatak a jl ismert logikai "sszekuszlsok":

If A > 5 And A < 9 Then Print "A nagyobb mint 5, s A kisebb mint 9."
If A > 3 Or B > 7 Then Print "A nagyobb mint 3 vagy B nagyobb mint 7."

A legfontosabb logikai mveletek:

s = and
vagy = or
kizr vagy = xor
negls = not

Ha tbb sort akarunk megadni a felttel teljeslse esetn, akkor azt gy tehetjk meg:

If A > 5 Then
  A = 0
  Print "Mivel az A nagyobb volt mint 5, ezrt most A rtke 0."
End if

Nem ktelez beljebb kezdeni a sorokat, de az tlthatsg rdekben nagyon ajnlott.

Az if-hez tartozik mg az else s az elseif. Az elseif-et gy lehetne fordtani, hogy "de ha nem s ...", mivel ezt a program csak akkor vizsglja, ha az if-ben adott felttel nem teljesl. Az else akkor hajtdik vgre, ha egyik felttel sem teljesl. Plda:

If A = 5 Then 
  Print "Az A rtke 5."
Elseif A = 6 Then 
  Print "Az A rtke 6."
Else
  Print "A rtke se nem 5, se ne nem 6."
End If

Ha Else-t tartalmaz szerkezeteket akarunk hasznlni, akkor (legalbbis VB 3.0 alatt) mindenkpp kln sorba kell rnunk a felttetel teljeslse esetn vgrehajtand utastsokat, akr egyetlen sorrl van sz, akr nem. Az End If-et mindig a szerkezet lezrsnl hasznljuk.

A felttelekben a kvetkez mveletek szerepelhetnek:

A > B   A nagyobb mint B
A < B   A kisebb mint B
A = B   A egyenl B-vel
A >= B  A nagyobb vagy egyenl mint B
A <= B  A kisebb vagy egyenl mint B
A <> B  A nemegyenl B-vel

Ha mr emltettem a logikai mveleteket, akkor kvetkezzenek most a matematikai mveletek.

sszeads: +
Kivons: -
Szorzs: *
Oszts: /
Egsz oszts utn: \
Maradk oszts utn: mod
Hatvnyozs: ^

Az osztsoknl lehet csak egy problma, de egy pldval mindjrt megvilgtom:

A = 6 / 4
B = 6 \ 4
C = 6 mod 4

A ekkor 1,5
B ekkor 1
C ekkor 2

A mveletek sorrendje a megszokott. Termszetesen lehetsgnk van komplexebb mveletek kialaktsra is zrjelek alkalmazsval, ekkor rtelemszeren vltozik a mveletek sorrendje:

If ((A+B)*C)^3 >= (B\4)*(3*D) Then ...

A megjegyzseket mg nem emltettem, ezeknek kt f formja van: vagy egy rem szcskt tesznk a sor el, vagy egy ' jelet.

Kvetkezzenek a ciklusok! Itt is vannak elltesztelsk, htultesztelssk, meg a for, amit kln kategriba szoks sorolni, br nem rtem, hogy mirt. Mindegy.

A for-ral kezdnk. rok egy pldt, aztn majd elemezzk.

For A = 1 to 5
  Print A
Next A

Ennek a programnak az eredmnye:

1
2
3
4
5

Teht a for kulcssz utn kell adni egy vltozt, ami majd "szmolni fog". Ennek rtket adunk, az elbbi esetben 1-et. Majd megadjuk azt, hogy tig szmoljon el (to 5). Ezek utn megadjuk, hogy milyen utastsok hajtdjanak vgre, ezt nevezzk ciklusmagnak. A ciklust a Next-tel zrjuk le. Nem ktelez kitenni azt, hogy melyik ciklust zrjuk le, lehetne simn Next-et rni, de ez is a jobb tlthatsgot szolglja. Ha azt akarjuk, hogy ne "felfele", hanem "lefele" (szebben: ne pozitv, hanem negatv irnyba) szmoljon, meg kell adnunk azt is, hogy "milyen lpsekben" haladjon. Erre a step kulcsszt hasznljuk, s ha lefele akarunk szmolni, akkor rtelemszeren -1 -et kell megadnunk. Teht itt nincs downto, ahogy ezt a Pascal-osok megszokhattk...

For A = 5 to 1 step -1
  Print A
Next A

Futs eredmnye:

5
4
3
2
1

Egy dolgot kell megemltenem, ez az Exit For, ami kilp a ciklusbl, akr elrte mr a szmll a megadott rtket, akr nem.

Kvetkezzenek az htultesztels ciklusok. Ezek addig hajtdnak vgre, amg a megadott felttel teljesl. Plda a hasznlatukra:

A = 0
Do Until A = 5
  A = A + 1
  Print A
Loop

A fenti pldbl lthatjuk, hogy a Do Until kifejezs utn rjuk be a felttelt, aztn itt is a ciklusmag kvetkezik, majd Loop-pal lezrjuk a ciklust. A felttel ellenrzse itt a Loop sor vgrehajtdsnl trtnik.
Magyarra lefordtva a Do Until-t: "Addig csinld amg A t"

Ezt azrt rtam le, mert az elltesztels ciklusoknl pont fordtva van. Itt is rgtn pldval kezdek:

A = 0
Do While A <> 5
  A = A + 1
  Print A
Loop

Magyarra lefordtva: "Amg A nem t, addig csinld". A legfontosabb klnbsg az, hogy itt a Do While sorhoz rve vizsglja meg a fordt a felttelt. Az Exit Do-val itt is "kiugorhatunk" a ciklusbl.

Egyetlen dolog van vissza, aztn jhetnek a vltozk. Ez a Select Case, ami akkor hasznos, ha a amgy sok if-et kne hasznlnunk, ami lelasstja a programot. Hasznlata:

Select Case A
  Case 1: 
   Print "Az A rtke 1 volt, mr 0."
   A = 0
  Case 2:
   Print "Az A rtke 2 volt, mr 0."
   A = 0
  Case 3:
   Print "Az A rtke 3 volt, mr 0."
   A = 0
  Case Else:
   Print "A rtke se nem 1, se nem 2, se nem 3."
End Select

Innen szerintem knnyen leolvashatod a formtumot. A Select Case utn megadod, hogy mit akarsz vizsglni, ebben az esetben az A vltozra gondoltunk. A Case 1: utn adod meg azokat az utastsokat, amik akkor teljeslnek, ha A rtke 1, a Case 2: utn azokat, amik ha A rtke 2, stb... A Case Else: utn pedig azokat, amik csak akkor teljeslnek, ha a fenti felttelek kzl egyik sem teljesl. Megadhatsz gy is dolgokat:

Case 1-10: Print "Az ltalad megadott szm egy s tz kz esik."

Ht akkor vgeztnk, jjjenek a vltozk!

Vltozk
-=-=-=-=

A VB-ben gy is ltrejnnek vltozk, ha csak simn hasznlod ket, de mg nem emltetted, de gy is, hogy eltte deklarlod ket. Teht semmi baj nincs akkor, ha egy "abc123" nev vltozt elszr hasznlsz, mg sehol sem emltetted, ltrejn az magtl is. Ha hivatkozol r. Ettl fggetlenl rdemes deklarlni ket. Erre a Dim parancs szolgl. Plda:

Dim abc123 As Integer

Ekkor abc123 egy integer lesz. A vltoznevek nem tartalmazhatnka specilis karaktereket (mint pldul *, @, stb.), s nem kezddhetnek szmmal. A fontosabb vltoztpusok:

% Integer   -32.768 --- 32.767
& Long      -2.147.483.648 --- 2.147.483.647
# Double    4 bjtos, felvehet egsz rtkeket is, gyhogy sok :-) Egybknt trt szmok
! Double    8 bjtos, felvehet egsz rtkeket is, gyhogy sok :-) Egybknt trt szmok
$ String    Karakterlnc, 65536 karakter maximum

Az els oszlopban vannak a vltoz jelei, a msodikban a neve, a harmadikban a tartomny. Ha egy vltozt nem deklarlsz elre, s nem is adsz neki jelet (mint pldul %, $, !, egyszval az els oszlop), akkor az "szvegkrnyezettl fggen" vagy string lesz, vagy double.

VB-ben egyvalami miatt nagyon fontos a vltozk elre deklarlsa: ha nem teszed meg, akkor egy vltozt CSAK AZON AZ ELJRSON/FUNKCIN BELL HASZNLHATOD, AMIN BELL "FELTNT". Ha olyan vltozt akarsz, ami az egsz ablakon bell hasznlhat, akkor azt a (general) rsznl kell deklarlnod, ha pedig olyat, ami az egsz programon bell, akkor azt majd ksbb megbeszljk, gy a negyedik rsz krnykn, mert ott van eltrs a klnbz verzij VB-k kztt ;-)

Van egy igencsak hnyattatott sors vltoz, Boolean, ami egyes VB-kben van, egyes VB-kben pedig nincs. Pldul biztosan llthatom hogy 5.0-ban van, 3.0-ban nincs. De lltlag VB 4.0 16 bitesben mg nincs, de 32 bitesben mr van (ezt csak gy hallottam). Ez kt rtket vehet fel, igaz (true) vagy hamis (false). Erre tbb szt nem is pazarlok.

Egyvalamirl mg nem esett sz, a tmbkrl, vagy ms nven mtrixokrl. Ezeket mindenkpp deklarlni kell, ha hasznlni akarod ket. Egy pldval el is intzzk az egszet:

Dim Nevek(20) As String

Mr csak annyit kell megjegyezni rla, hogy ez 21 elemes tmbt kszt, az els ugyanis a nulladik elem. Azt is meg lehet adni, hogy mettl meddig legyenek tmbelemek. Ezt a To szcskval tehetjk meg:

Dim Nevek(1 To 20) As String

Ez mr valban 20 elemes tmb lesz. Tbbdimenzis tmbket is kszthetnk. Pldul egy sakktbla mezinek kezelst a

Dim SakkTabla(8,8) As Integer

tmbbel oldahatnnk meg.

Vltozk konvertlsa
-=-=-=-=-=-=-=-=-=-=-

Voltakppen ezrt rtam ezt az egsz "nulladik rszt", ugyanis gy a harmadik rsz tjkn rjttem, hogy ez bizony fontos, s kimaradt, nem lehet nlkle tovbbmenni.

Kt alapvet dologrl lesz sz, ezek: szmbl stringet, stringbl szmot.

A szm tpusbl stringet kszteni a CStr funkcival lehet. Szoks szerint egy plda:

A = 16
B$ = CStr(B)

A B$ ekkor "16" lesz.

Van egybknt egy Str funkci is, ez ugyanazt csinlja, mint a CStr, de akkor egy szkz karakter is lesz a string elejn. Teht ha az elz pldban CStr helyett Str-et rtunk volna, akkor B$ nem "16", hanem " 16" lenne. A vilg nagy rejtlyei kz tartozik, hogy mirt van ez gy.

Stringbl lehet akrmilyen szmot kszteni, a Val funkcival:

A$ = "42"
B = Val(A$)

B ekkor 42 lesz.

Ha mondjuk ezt a karaktert akarjuk szmm alaktani: "3fdhajhfjdhf", akkor simn hrom lesz belle. Teht az els karakternek mindenkpp szmnak kell lennie, ha ez nem gy van, akkor a kapott rtk nulla lesz.

Itt hvom fel a figyelmed a magyar s az angol nyelv kztti eltrs miatt add problmra:

A$ = "13,5"
B = Val(A$)

Ekkor B vltoz rtke nem 13,5 lesz, hanem csak 13! Mirt is? Mert az angolban nem tizedesvessz van, hanem tizedespont. Teht helyesen:

A$ = "13.5"
B = Val(A$)
Print B

A fenti hrom sor viszont mr 13,5-knt fogja kirni a szmot, feltve ha magyar nyelvi belltsaid vannak...



Ezt azt iromnyt Kvi Blint ksztette. Fellem azt csinlsz vele, amit akarsz, trhatod, de azrt emlts meg engem is, j? Frisstseket, folytatsokat mindig tallhatsz a Visual Basic znban: http://vbzona.fw.hu/